235. Grafana Alert Template
Why
新服務要上線了,
要趕緊把 Observability做一做,
之前的版本都會有一長串資訊,
看了就很煩,不能很直觀的知道是哪邊出問題。
訊息又都要一個一個打,
所以,我能不能弄成一個範本,減少我人工的作業?
Solution
注意,因有特殊符號,導致編譯出問題。
故將裡面的所有{ } 改為全形,請自行改為半形
故將裡面的所有{ } 改為全形,請自行改為半形
故將裡面的所有{ } 改為全形,請自行改為半形
很重要,說三次
原始的範本,通常長成這樣。
有很多資訊,但有些是用不到的。
[FIRING:1] (cpu-dealer GKE Cluster normal backend)
Firing
Value: B=2.632
Labels:
- alertname = cpu-abc
- grafana_folder = GKE Cluster
- level = normal
- service-type = backend
Annotations:
- summary = 環境:Prod
機器名稱:dealer
告警訊息:CPU使用量1core
Source: http://localhost:3000/alerting/grafana/uRU7sCEnz/view?orgId=1
Silence: http://localhost:3000/alerting/silence/new?alertmanager=grafana&matcher=alertname%3Dcpu-dealer&matcher=grafana_folder%3DGKE+Cluster&matcher=level%3Dnormal&matcher=service-type%3Dbackend
Dashboard: http://localhost:3000/d/2-jy90-nk?orgId=1
Panel: http://localhost:3000/d/2-jy90-nk?orgId=1&viewPanel=13
最後的成果
[FIRING:1] sftp-qa Disk Space alarm-GCE (normal sftp-qa value_percent_used_mean_aggregate)
Annotations:
- summary: 環境:alarm-GCE
機器名稱:sftp-qa
告警項目:sftp-qa Disk Space
告警訊息:硬碟空間目前 46.22% ,已達上限 70%
Dashboard URL:
[View Dashboard](http://<ip>/grafana/d/f649857c-4763-442f-9919-b41c3832d5b8?orgId=1)
Step 1. 確認版本
首先確認Grafana的版本,目前我使用的是Grafana v11.2.0
。
版本不一樣,指令可能會不一樣,需要再去查文件。
Step 2. 設定Notification Template
開啟 Home > Alerting > Cotact points
切換到分頁 Notification Templates ,選擇 Add Notification Template
在左上的Template框框,輸入下面程式碼。
如果指令沒錯,可以在右邊的preview看到結果。
{{ define "alert_message" }}
{{ range .Alerts }}
{{ if gt (len .Annotations) 0 }}
Annotations:
{{ range $key, $value := .Annotations }}
- **{{ $key }}**:
{{ $value }}
{{ end }}
{{ else }}
No Annotations found.
{{ end }}
Dashboard URL:
[View Dashboard]({{ .DashboardURL }})
{{ end }}
{{ end }}
這程式我是叫GPT寫的,再稍微小改一下。
如果想自己開發,請參考Configure notification messages
p.s. 注意版本,版本不一樣從網頁的版本號調整
Step 3. 綁定notification policy
回到Contact Points,
選擇你的notification policy
選擇剛剛新增的Template
可以按一下Test驗證一下有沒有通。
Step 4. 設定 Alert Rules
基本的設定就參考Alert rules
在Summary則是輸入
環境:{{ index $labels "grafana_folder" }}
機器名稱:{{ index $labels "metadata.label.system.name" }}
告警項目:{{ index $labels "alertname" }}
告警訊息:硬碟空間目前 {{ humanize (index $values "B").Value }}% ,已達閥值 70%
index是用來顯示標籤中的內容,
可以更方便得到你想要的數值。
可以在測試時用 {{ $labels }}
看有哪些標籤可用。
p.s 版本不一樣,取值的方式也不一樣。
同樣可以使用的是 {{ $value }}
,這邊注意只有value沒有s。
但在使用index時,需要加上 s。
humanize
是比較人性化的format函數。
humanize
會將多餘的小數點位數移除或改為比較易讀的方式。
humanizePercentage
將小數點轉為百分比
humanizeDuration
將時間轉為可讀的時間
更多可參考下面連結,裡面也有其他function的用法。
ref. humanize
Troubleshooting
當有一個變數寫錯時,發送告警時,全部的變數都不會顯示。
會變成下面的情況。
- summary:
{{ $value }}
環境:{{ index $labels "grafana_folder" }}
機器名稱:{{ (index $values "B").persistentvolumeclaim }}
告警項目:{{ index $labels "alertname" }}
告警訊息:硬碟空間目前 {{ humanizePercentage (index $values "B").Value }} ,已達閥值 70%
此時就看一下是不是那邊要加空格沒空格,
或是指定的values的欄位有錯誤。
像上面的錯誤,機器名稱的部分應該要改成這樣。
機器名稱:{{ (index $values "B").Labels.persistentvolumeclaim }}